package com.demo.templatemethod.hm;

/**
 * @author lkz
 * @ClassName: AbstracClass
 * @description: TODO
 * @date 2022/3/17 18:44
 */
public abstract class AbstractClass {

    public void pourOil() {
        System.out.println("倒油");
    }

    //第二步：热油是一样的，所以直接实现
    public void heatOil() {
        System.out.println("热油");
    }

    //第三步：倒蔬菜是不一样的（一个下包菜，一个是下菜心）
    public abstract void pourVegetable();

    //第四步：倒调味料是不一样
    public abstract void pourSauce();


    //第五步：翻炒是一样的，所以直接实现
    public void fry(){
        System.out.println("炒啊炒啊炒到熟啊");
    }

    public void cooke(){
        this.fry();
        this.heatOil();
        this.pourOil();
        this.pourSauce();
        this.pourVegetable();
    }

}

class ConcreteClass_BaoCai extends AbstractClass{
    @Override
    public void pourVegetable() {
        System.out.println("这是包菜");
    }

    @Override
    public void pourSauce() {

        System.out.println(" 酱油 和醋");
    }
}

class ConcreteClass_CaiXin extends AbstractClass{

    @Override
    public void pourVegetable() {
        System.out.println("娃娃菜--");
    }

    @Override
    public void pourSauce() {
        System.out.println("鸡蛋汁--");
    }
}
class ClientAbstract{

    public static void main(String[] args) {
        ConcreteClass_BaoCai baocai = new ConcreteClass_BaoCai();
            baocai.cooke();
    }
}